/*
    The NeonX Library

    Copyright (c) 2013 darkcat

    Code covered by the MIT License
*/

#pragma once

// nx...
#include "config/general.h"
// type::Type
#include "type/typetools.h"

//////////////////////////////////////////////////////////////////////////
NX_BEG
//////////////////////////////////////////////////////////////////////////

namespace private_
{
    template <class P, class T>
    class Final_
    {
        friend typename type::Type<P>::ret;
        friend typename type::Type<T>::ret;

    private:
        Final_() {}
        ~Final_() {}
    };
}

/*
    Final class interface
*/

template <class T>
class Final : virtual public private_::Final_<Final<T>, T>
{
public:
    Final() {}
    ~Final() {}
};

//////////////////////////////////////////////////////////////////////////
NX_END
//////////////////////////////////////////////////////////////////////////
